package com.devin.avatar.common.util;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public abstract class CookieUtils {
    /**
     * 将request cookie封装到Map里面
     * 
     * @return
     */
    public static Map<String, Cookie> getCookieMap(HttpServletRequest req) {
	Map<String, Cookie> cookieMap = new HashMap<String, Cookie>();
	Cookie[] cookies = req.getCookies();
	if (null != cookies) {
	    for (Cookie cookie : cookies) {
		cookieMap.put(cookie.getName(), cookie);
	    }
	}
	return cookieMap;
    }

    /**
     * 根据名字获取cookie的值
     * 
     * @param name
     * @return
     */
    public static String getCookie(HttpServletRequest req, String name) {
	Map<String, Cookie> cookieMap = getCookieMap(req);
	if (cookieMap.containsKey(name)) {
	    Cookie cookie = (Cookie) cookieMap.get(name);
	    try {
		return URLDecoder.decode(cookie.getValue(), "UTF-8");
	    } catch (Exception e) {
		throw new RuntimeException(e);
	    }
	} else {
	    return null;
	}
    }

    /**
     * 设置 Cookie（有效期1天）
     * 
     * @param name 名称
     * @param value 值
     */
    public static void setCookie(HttpServletResponse response, String name, String value) {
	setCookie(response, name, value, 60 * 60 * 24);
    }

    /**
     * 设置 Cookie
     * 
     * @param name 名称
     * @param value 值
     * @param maxAge cookie生命周期 ,以秒为单位,如果为-1则表示这个cookie随着浏览器的关闭即消失 maxAge
     *            可以为正数，表示此cookie从创建到过期所能存在的时间，以秒为单位，此cookie会存储到客户端电脑，以cookie文件形式保存，不论关闭浏览器或关闭电脑，直到时间到才会过期。
     *            可以为负数，表示此cookie只是存储在浏览器内存里，只要关闭浏览器，此cookie就会消失。maxAge默认值为-1
     *            还可以为0，表示从客户端电脑或浏览器内存中删除此cookie
     */
    public static void setCookie(HttpServletResponse response, String name, String value, int maxAge) {
	setCookie(response, name, value, "/", maxAge);
    }

    /**
     * 设置 Cookie
     * 
     * @param name 名称
     * @param value 值
     * @param path html文件所在的路径, 以‘/’开头
     * @param maxAge cookie生命周期 ,以秒为单位,如果为-1则表示这个cookie随着浏览器的关闭即消失 maxAge
     *            可以为正数，表示此cookie从创建到过期所能存在的时间，以秒为单位，此cookie会存储到客户端电脑，以cookie文件形式保存，不论关闭浏览器或关闭电脑，直到时间到才会过期。
     *            可以为负数，表示此cookie只是存储在浏览器内存里，只要关闭浏览器，此cookie就会消失。maxAge默认值为-1
     *            还可以为0，表示从客户端电脑或浏览器内存中删除此cookie
     */
    public static void setCookie(HttpServletResponse res, String name, String value, String path, int maxAge) {
	Cookie cookie = new Cookie(name, null);
	cookie.setPath(path);
	cookie.setMaxAge(maxAge);
	try {
	    cookie.setValue(URLEncoder.encode(value, "utf-8"));
	} catch (UnsupportedEncodingException e) {
	    e.printStackTrace();
	}
	res.addCookie(cookie);
    }
}
